home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / dev / c / ExtrasLib.lha / ExtrasLib / Source / GTLIB / gto..c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-30  |  3.2 KB  |  187 lines

  1. #include <extras/gtobject.h>
  2.  
  3. struct mxData
  4. {
  5.   struct TextAttr *mx_TA;
  6.   struct TextFont *mx_TF;
  7.   LONG   Width,Height;
  8. //  struct Gadget *mx_Gad;
  9. //  struct NewGadget *mx_NGad
  10.   struct IBox mx_Domain[3];
  11. };
  12.  
  13. #define MX_TAGS 6
  14.  
  15. LONG MX_Dispatch(Class *C, Object *O, Msg *M)
  16. {
  17.   struct gData *gd;
  18.   
  19.   gd=INST_DATA(C,O);
  20.   
  21.   switch(M->MethodID)
  22.   {
  23.     case OM_NEW:
  24.       if(O=DoSuperMethodA(C,O,M))
  25.       {
  26.         gd=INST_DATA(C,O);
  27.         
  28.         gd->mx_GTags=CloneTagItems(MX_Tags);
  29.         
  30.         GTMX_SetGadgetAttrs(C,O,M);
  31.       }
  32.       rv=O;
  33.       break;
  34.     case OM_DELETE:
  35.       FreeTagItems(gd->mx_GTags);
  36.       rv=0;
  37.       break;
  38.     case OM_SET:
  39.       rv=GTMX_SetAttrs(C,O,(APTR)M);
  40.       break;
  41.     case OM_GET:
  42.       rv=GTMX_GetAttrs(C,O,(APTR)M);
  43.       break;
  44.   }
  45.   return(O);
  46. }
  47.  
  48. #include <tagitemmacros.h>
  49.  
  50. LONG counttags(struct TagItem *TagList)
  51. {
  52.   LONG c;
  53.   
  54.   c=0;
  55.   
  56.   ProcessTagList(TagList,tag,tstate)
  57.   {
  58.     c++;
  59.   }
  60.   return(c);
  61. }
  62.  
  63. LONG GTMX_SetAttrs(struct Class *C, struct Object *O, struct opSet *Set)
  64. {
  65.   struct gData *gd;
  66.   struct TagItem *tags,*nt;
  67.   
  68.   LONG tagc;
  69.   
  70.   gd=INST_DATA(C,O);
  71.  
  72.   tags=CloneTagItems(Set->ops_AttrList);
  73.   
  74.   FilterTagChanges(tags,gd->TagList,1);
  75.  
  76.   tagc=counttags(gd->TagList) + counttags(tags) + 1;
  77.   
  78.   if(nt=AllocTagItems(tagc))
  79.   {
  80.     
  81.   }
  82.   
  83. }
  84.  
  85. LONG GTMX_GetAttr(struct Class *C, struct Object *O, struct opGet *Get)
  86. {
  87.   APTR data;
  88.   
  89.   rv=1;
  90.   
  91.   switch(Get->opg_AttrID)
  92.   {
  93.     case GTA_Dimensions:
  94.       data=gdata->mx_Dimensions;
  95.       break;
  96.     // Gadtools tags
  97.     case GTMX_Active:
  98.       data->gdata->mx_Active;
  99.       break;
  100.     default:
  101.       rv=0;
  102.   }
  103.   
  104.   if(rv)
  105.   {
  106.     *(Get->opg_Storage)=data;
  107.   }
  108. }
  109.  
  110. void mxCreateGadget(C,O,CG)
  111. {
  112.   
  113. }
  114.  
  115.  
  116. ULONG mxGetSize(struct gtpGetSize *GS)
  117.       
  118.       if(scaled)
  119.       {
  120.         mxh=font->tf_YSize+1;
  121.         mxw=max(17,mxh);
  122.       }
  123.       
  124.       while(*labels)
  125.       {
  126.         LONG lablen;
  127.         
  128.         lablen=StrLength( SL_TextFont,    font,
  129.                           SL_String,      *labels,
  130.                           TAG_DONE);
  131.         maxlabellen=max(maxlabellen,labellen);
  132.         labels++;
  133.       }
  134.       
  135.       domain.Width  = mxw + 8 + malabellen;
  136.       domain.Height = (mxh + spacing) * labelcnt - spacing;
  137.       
  138.       if(flags & PLACETEXT_LEFT)
  139.         domain.Left-=maxlabellen;
  140.       else
  141.         domain.Left=0;
  142.       
  143.       domain.Top=0;
  144.       
  145.       CloseFont(font);
  146.     }
  147.   }
  148.   
  149.   GS->gtpgs_Domain[0]=domain;
  150.   GS->gtpgs_Domain[1]=domain;
  151.   GS->gtpgs_Domain[2]=domain;
  152.   return(1);
  153. }
  154.  
  155.  
  156.  
  157.  
  158. /*
  159.   if(tplace)
  160.   {
  161.     switch(tplace)
  162.     {
  163.       case PLACETEXT_ABOVE:
  164.       case PLACETEXT_BELOW:
  165.         {
  166.           LONG ll;
  167.           struct IBox lbox;
  168.           
  169.           ll=StrLength(SL_TextFont,    gd->mx_TF,
  170.                        SL_String,      gd->mx_GadgetText,
  171.                        TAG_DONE));
  172.           lbox.Width    = ll;
  173.           lbox.Height   = gd->mx_TF->tf_YSize;
  174.           lbox.LeftEdge = gd->
  175.           
  176.           
  177.           Size->gtps_Domain->Left  = min(Size->gtps_Domain->Left, -(ll    
  178.           Size->gtps_Domain->Width = max(Size->gtps_Domain->Width, ll );
  179.           Size->gtps_Domain->Height+= 4 + gd->mx_TF->tf_YSize;
  180.         }
  181.         break;
  182.       case PLAVETEXT_LEFT:
  183.       case PLACETEXT_RIGHT:
  184.         
  185.   }
  186.   */
  187.